package org.example.ExperimentFour.Third;

// 用户控制器
import java.lang.reflect.Field;
import java.lang.reflect.Method;

// 用户控制器
public class UserController {
    @PostMapping("/get_user")
    public UserVO getUser(UserDTO dto) {
        return new UserVO();
    }

    public static void main(String[] args) {
        // 生成接口文档
        generateAPIDocumentation(UserController.class);
    }

    // 生成接口文档方法
    private static void generateAPIDocumentation(Class<?> controllerClass) {
        // 获取类级别的PostMapping注解信息
        PostMapping classPostMapping = controllerClass.getAnnotation(PostMapping.class);
        if (classPostMapping != null) {
            System.out.println("地址: " + classPostMapping.value());
        }

        // 获取方法级别的PostMapping注解信息
        for (Method method : controllerClass.getDeclaredMethods()) {
            PostMapping methodPostMapping = method.getAnnotation(PostMapping.class);
            if (methodPostMapping != null) {
                System.out.println("方法: " + methodPostMapping.value());

                // 获取请求参数信息
                System.out.println("请求参数：");
                System.out.println("    字段名    类型        注释");
                for (java.lang.reflect.Parameter parameter : method.getParameters()) {
                    ApiModelProperty annotation = parameter.getAnnotation(ApiModelProperty.class);
                    if (annotation != null) {
                        System.out.printf("    %-10s %-10s %s\n", parameter.getName(), parameter.getType().getSimpleName(), annotation.value());
                    }
                }

                // 获取返回参数信息
                System.out.println("返回参数：");
                System.out.println("    字段名    类型        注释");
                for (Field field : method.getReturnType().getDeclaredFields()) {
                    ApiModelProperty annotation = field.getAnnotation(ApiModelProperty.class);
                    if (annotation != null) {
                        System.out.printf("    %-10s %-10s %s\n", field.getName(), field.getType().getSimpleName(), annotation.value());
                    }
                }
            }
        }
    }
}
